def subst(s, st, ed):
result = []
for i in range(st, ed):
result.append(s[i])
return ''.join(result)
for _ in range(int(input())):
n = int(input())
s = input().strip()
f = 0
for i in range(1, n // 2 + 1):
if n % i == 0:
dic = {}
dicsz = 0
for j in range(0, n, i):
dd = subst(s, j, j + i)
if dd not in dic:
dic[dd] = 1
dicsz += 1
else:
dic[dd] += 1
if dicsz == 1:
for _, dj in dic.items():
if i * dj == n and f <= 1:
print(i)
f = 1
break
if dicsz == 2:
x = list(dic.keys())
c = sum(x[0][comp] != x[1][comp] for comp in range(i))
for _, j in dic.items():
if i * (j + 1) == n and c <= 1:
print(i)
f = 1
break
if f == 1:
break
if f == 0:
print(n)
957. Prison Cells After N Days | 946. Validate Stack Sequences |
921. Minimum Add to Make Parentheses Valid | 881. Boats to Save People |
497. Random Point in Non-overlapping Rectangles | 528. Random Pick with Weight |
470. Implement Rand10() Using Rand7() | 866. Prime Palindrome |
1516A - Tit for Tat | 622. Design Circular Queue |
814. Binary Tree Pruning | 791. Custom Sort String |
787. Cheapest Flights Within K Stops | 779. K-th Symbol in Grammar |
701. Insert into a Binary Search Tree | 429. N-ary Tree Level Order Traversal |
739. Daily Temperatures | 647. Palindromic Substrings |
583. Delete Operation for Two Strings | 518. Coin Change 2 |
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |